import axios from 'axios';
import {getRedirectPath} from "../util";

const ERROR_MSG = 'ERROR_MSG';
const LOAD_DATA = 'LOAD_DATA';
const AUTH_SUCCESS = 'AUTH_SUCCESS';
const LOGOUT = 'LOGOUT';

const initState = {redirectTo: '',
   msg: '',
   user: '',
   pwd: '',
   type: '',
   avatar: ''
};


//reducer
export function user(state = initState, action) {
    switch (action.type) {
        case AUTH_SUCCESS:
            return {...state, redirectTo: getRedirectPath(action.payload), msg: '', ...action.payload};
        case LOAD_DATA:
            return {...state, ...action.payload};
        case ERROR_MSG:
            return {...state, msg: action.msg};
        case LOGOUT:
            return {...initState, redirectTo: '/login'}
        default:
            return state;
    }
}

function authSuccess(obj) {
    const {pwd, ...data} = obj;
    return {type: AUTH_SUCCESS, payload: data}
}

function errorMsg(msg) {
    return {msg, type: ERROR_MSG}
}

export function loadData(userInfo) {
    return {type: LOAD_DATA, payload: userInfo}
}

export function logoutSubmit() {
    return {type: LOGOUT}
}

export function userInfo() {
    //获取用户信息
    return dispatch => {
        axios.get('/user/info').then(res => {
            if(res.status === 200) {
                if (res.data.code === 0) {
                    //有用户登录信息
                    this.props.loadData(res.data.data);
                } else {
                    this.props.history.push('/login')
                }
            }
        })
    }
}

export function login({user, pwd}) {
    if (!user || !pwd) {
        return errorMsg('用户名或密码必须输入');
    }

    return dispatch => {
        axios.post('/user/login', {user, pwd}).then(res => {
            if (res.status === 200 && res.data.code === 0) {
                dispatch(authSuccess(res.data.data));
            } else {
                dispatch(errorMsg(res.data.msg));
            }
        })
    }
}

export function register({user, pwd, repeatPwd, type}) {
    if (!user || !pwd) {
        return errorMsg('用户名或密码必须输入');
    }

    if (pwd !== repeatPwd) {
        return errorMsg('密码和确认密码不匹配');
    }

    return dispatch => {
        axios.post('/user/register', {user, pwd, type}).then(res => {
            if (res.status === 200 && res.data.code === 0) {
                dispatch(authSuccess({user, pwd, type}));
            } else {
                dispatch(errorMsg(res.data.msg));
            }
        });
    }
}

export function update(data) {
    return dispatch => {
        axios.post('/user/update', data).then(res => {
            if (res.status === 200 && res.data.code === 0) {
                dispatch(authSuccess(res.data.data));
            } else {
                dispatch(errorMsg(res.data.msg));
            }
        })
    }
}

